package com.gobang.service;

import com.gobang.domain.dto.UserRegisterDTO;
import com.gobang.domain.entity.User;
import com.gobang.domain.vo.UserInfoVO;

/**
 * 用户管理业务服务接口
 * 负责用户注册、用户信息查询和用户游戏统计更新
 * 
 * @author System
 * @since 1.0.0
 */
public interface UserService {

    /**
     * 用户注册
     * 验证用户名唯一性，密码加密存储，创建用户初始资料
     *
     * @param registerDTO 注册请求数据
     * @return 用户信息
     */
    UserInfoVO register(UserRegisterDTO registerDTO);

    /**
     * 根据用户ID查询用户信息
     * 优先从Redis缓存查询，缓存未命中时查询数据库并更新缓存
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfoVO getUserById(Long userId);

    /**
     * 根据用户名查询用户
     * 供认证授权模块调用，用于登录验证
     *
     * @param username 用户名
     * @return 用户实体信息
     */
    User findByUsername(String username);

    /**
     * 更新用户游戏统计信息
     * 供积分管理模块调用，用于游戏结束后更新用户积分和统计数据
     * 同时更新数据库和Redis缓存
     *
     * @param userId 用户ID
     * @param scoreChange 积分变化（正数为增加，负数为减少）
     * @param isWin 是否获胜
     * @return 更新是否成功
     */
    boolean updateUserGameStats(Long userId, Integer scoreChange, boolean isWin);
} 